package com.bayss.core.service.sku;

import com.bayss.core.constant.ResultMsg;
import com.bayss.core.entity.goods.Sku;
import com.bayss.core.entity.goods.SkuExample;
import com.bayss.core.entity.goods.Spu;
import com.bayss.core.entity.goods.mapper.SkuMapper;
import com.bayss.core.entity.goods.mapper.SpuMapper;
import com.bayss.core.model.SkuQuery;
import com.bayss.core.util.FileUtil;
import com.bayss.core.util.SkuUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

import static com.bayss.core.enums.GoodsType.sku;

/**
 * Created by LDL on 2019/12/9.
 */
@Service
public class SkuService {
    private static Logger logger = LogManager.getLogger();
    @Autowired
    private SkuMapper skuMapper;
    @Autowired
    private SpuService spuService;
    /**
     * 分页查询
     */
    public PageInfo<Sku> findByPage(Integer page, Integer pageSize,SkuQuery skuQuery) {
        SkuExample example = new SkuExample();
        SkuExample.Criteria criteria = example.createCriteria();
        criteria.andStatusEqualTo(1);
        if (skuQuery != null && skuQuery.getSkuName() != null) {
            criteria.andSkuNameCnLike("%" + skuQuery.getSkuName() + "%");
        }
        if (skuQuery != null && skuQuery.getId() != null) {
            criteria.andIdEqualTo(skuQuery.getId().longValue());
        }
        example.setOrderByClause("create_time desc");
        PageHelper.startPage(page, pageSize);
        PageInfo<Sku> result = PageHelper.startPage(page, pageSize).doSelectPageInfo(() -> skuMapper.selectByExample(example));
        return result;
    }

    /**
     * 根据条件查询sku列表
     *
     * @param sku
     * @return
     */
    public List<Sku> list(Sku sku) {
        SkuExample example = new SkuExample();
        SkuExample.Criteria criteria = example.createCriteria();
        criteria.andStatusEqualTo(1);
        criteria.andSkuCodeNotEqualTo("self_sku_");
        if (sku != null && sku.getClassifyId() != null) {
            criteria.andClassifyIdEqualTo(sku.getClassifyId());
        }
        if (sku != null && sku.getSkuCode() != null) {
            criteria.andSkuCodeEqualTo(sku.getSkuCode());
        }
        if (sku != null && sku.getId() != null) {
            criteria.andIdEqualTo(sku.getId());
        }
        example.setOrderByClause("create_time desc");

        List<Sku> list = skuMapper.selectByExample(example);
        return list;
    }

    /**
     * 根据id删除sku
     *
     * @param id
     */
    public void deleteById(Long id) {
        Sku sku = skuMapper.selectByPrimaryKey(id);
        if (sku != null && sku.getSkuCode().contains("self_sku_")) {
            logger.error("自选餐，配置性数据不能删除");
            return;
        }
        Sku skuUpdate = new Sku();
        skuUpdate.setId(sku.getId());
        skuUpdate.setStatus(0);
        skuMapper.updateByPrimaryKeySelective(skuUpdate);
    }

    /**
     * 修改sku
     *
     * @param sku
     */
    public void update(Sku sku) {
        sku.setSkuImageCn(FileUtil.formatImgUrl(sku.getSkuImageCn()));
        sku.setSkuImageEn(FileUtil.formatImgUrl(sku.getSkuImageEn()));
        sku.setSkuImageKo(FileUtil.formatImgUrl(sku.getSkuImageKo()));
        if (sku.getSpuCode().contains("self_spu_")) {
            sku.setSpuCode(null);
        }

        if (sku.getSkuCode().contains("self_sku_")) {
            sku.setSkuCode(null);
        } else {
            Sku skuDB = skuMapper.selectByPrimaryKey(sku.getId());
            sku.setSpuCode(SkuUtil.getSpuCodeFirst(skuDB.getSkuCode()) + sku.getSkuCode());
        }
        skuMapper.updateByPrimaryKeySelective(sku);
    }

    /**
     * 新建sku
     *
     * @param sku
     * @return
     */
    public ResultMsg add(Sku sku) {
        logger.info("add Sku:{}", sku);
        sku.setCreateTime(new Date());
        sku.setSkuImageCn(FileUtil.formatImgUrl(sku.getSkuImageCn()));
        sku.setSkuImageEn(FileUtil.formatImgUrl(sku.getSkuImageEn()));
        sku.setSkuImageKo(FileUtil.formatImgUrl(sku.getSkuImageKo()));
        if (!sku.getSkuCode().contains("sku_")) {
            sku.setSkuCode("sku_" + System.currentTimeMillis() + "_" + sku.getSkuCode());
        }

        Spu spu = spuService.findBySpuCode(sku.getSpuCode());
        if (spu != null) {
            sku.setClassifyId(spu.getClassifyId());
        }
        skuMapper.insertSelective(sku);
        return ResultMsg.success();
    }

}
